/**********************************************************************************************/
/* FBL_I_ValueDateTime.h                                                   					  */
/*                                                                       					  */
/* Copyright Paradigma, 1993-2006															  */
/* All Rights Reserved                                                   					  */
/**********************************************************************************************/

#ifndef _FBL_I_ValueDateTime_h
	#define _FBL_I_ValueDateTime_h
#pragma once

// FBL:
#include <VShared/FBL/publ/Util_classes/FBL_DTFormat.h>

#include <VShared/FBL/publ/Headers/FBL_pre_header.h>


/**********************************************************************************************/
FBL_Begin_Namespace


/**********************************************************************************************/
SMART_INTERFACE(I_ValueDateTime);
SMART_INTERFACE(I_Value);


/**********************************************************************************************/
// Interface class -- defines I_ValueDateTime API.
// 
interface FBL_SHARED_EXP_CLASS I_ValueDateTime : public I_Unknown
{
	 	
virtual 					~I_ValueDateTime( void );

	// ---------------------
	// Properties:
	
		// <DateTimeFormat> [r/w]
							/// Get/put date format.
virtual	void				put_DTFormat( const DTFormat* inDTFormat ) throw()			= 0;
virtual	const DTFormat*		get_DTFormat( void ) const throw()							= 0;


	// ---------------------
	// Date properties:

							/// Get/put the Year of current date.
virtual	long				get_Year( void ) const										= 0;
virtual	void				put_Year( long inYear )										= 0;

		// <Month> [r/w]
							/// Get/put the Month of current date.
virtual	ushort				get_Month( void ) const										= 0;
virtual	void				put_Month( ushort inMonth )									= 0;
		
		// <Day> [r/w]
							/// Get/put the Day of current date.
virtual	ushort				get_Day( void ) const										= 0;
virtual	void				put_Day( ushort inDay )										= 0;

	// ---------------------
	// Date Methods:

							/// Get/put the Year, Month and Day of current date.
virtual	void				get_Date( 
								long&	outYear, 
								ushort& outMonth, 
								ushort& outDay ) const									= 0;

virtual	void				put_Date( 
								long	inYear, 
								ushort	inMonth, 
								ushort	inDay )											= 0;


	public://///////////////////////////////////////////////////////////////////////////////////

	// ---------------------
	// Time properties:

		// [r/w] <Hour>
							/// get/put the Hours of current date.
virtual	ushort				get_Hours( void ) const										= 0;
virtual	void				put_Hours( ushort inHours )									= 0;

		// [r/w] <Minutes>
							/// get/put the Minutes of current date.
virtual	ushort				get_Minutes( void ) const									= 0;
virtual	void				put_Minutes( ushort inMinutes )								= 0;
		
		// [r/w] <Seconds>
							/// get/put the Seconds of current date.
virtual	ushort				get_Seconds( void ) const									= 0;
virtual	void				put_Seconds( ushort inSeconds )								= 0;

		// [r/w] <Millisecond>
							/// get/put the Milliseconds of current date.
virtual	ushort				get_Milliseconds( void ) const								= 0;
virtual	void				put_Milliseconds( ushort inMilliseconds )					= 0;


	// ---------------------
	// Time Methods:

							/// get/put the Hours, Minutes, Seconds and Milliseconds
							/// of current date.
virtual	void				get_Time( 
								ushort& outHours, 
								ushort& outMinutes, 
								ushort& outSeconds,
								ushort& outMilliseconds ) const							= 0;
			
virtual	void				put_Time( 
								ushort 	inHours, 
								ushort 	inSeconds, 
								ushort 	inMinutes,
								ushort	inMilliseconds )								= 0;


	public://///////////////////////////////////////////////////////////////////////////////////

	// ---------------------
	// DateTime Methods:

							/// get/put the Date and Time.
virtual	void				get_DateTime( 
								long&	outYear, 
								ushort& outMonth, 
								ushort& outDay,
								ushort& outHours, 
								ushort& outMinutes, 
								ushort& outSeconds,
								ushort& outMilliseconds ) const							= 0;
			
virtual	void				put_DateTime( 
								long	inYear, 
								ushort 	inMonth, 
								ushort 	inDay,
								ushort 	inHours, 
								ushort 	inMinutes,
								ushort 	inSeconds, 
								ushort	inMilliseconds )								= 0;	
}; 


/**********************************************************************************************/
FBL_End_Namespace


/**********************************************************************************************/
#include <VShared/FBL/publ/Headers/FBL_post_header.h>


/**********************************************************************************************/
#endif // _FBL_I_ValueDateTime_h
